package com.droid.persistor.mapper;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import oracle.jdbc.OracleTypes;

import com.droid.persistor.dao.Objetivo;
import com.droid.persistor.dao.Recordatorio;
import com.droid.persistor.dao.Usuario;
import com.droid.persistor.jdbc.DatabaseConnection;

public class RecordatorioMapper extends DatabaseConnection{

	private Number getIdRecordatorioSec(){
		String idSecuencia="IDRECORDATORIO";
		Number secBase;
		Connection conn = getConnection();
		
		CallableStatement cs;
		try {
			cs = conn.prepareCall("{ ? =call DROID.GETSECUENCE(?)}");

	            cs.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
	            cs.setString(2,idSecuencia);
	            cs.executeQuery();
	            secBase = cs.getInt(1);
	            return secBase;
	            
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			closeStatement();
		}
		return null;

	}
	
	public Recordatorio getRecordatorioGasto(Number idGasto) {
		Connection conn = getConnection();
		String sql = "SELECT idrecordatorio,nombre,fecha,mensaje,idgasto,idusuario FROM RECORDATORIOS WHERE IDGASTO= " + "'" + idGasto + "'";
		Recordatorio rec = new Recordatorio();
		try {
			rs = getResultSet(conn, sql);
			if (rs.next()) {
				rec.setIdGasto(rs.getInt("idgasto"));
				rec.setNombre(rs.getString("nombre"));
				rec.setIdRecordatorio(rs.getInt("idrecordatorio"));
				rec.setFecha(rs.getString("fecha"));
				rec.setMensaje(rs.getString("MENSAJE"));
				rec.setIdUsuario(rs.getInt("idusuario"));
				//rec.get
				return rec;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeStatement();
		}

		return null;

	}
	
	public void altaRecordatorio(Recordatorio reco){
		Number secRecordatorio=getIdRecordatorioSec();
		Connection conn = getConnection();
		String sql = "INSERT INTO recordatorios VALUES (" + secRecordatorio + ",'" + reco.getNombre() + "',"
				+ " to_date('" + reco.getFecha() + "','dd/mm/yyyy HH24:MI:SS'),'" + reco.getMensaje() 
				+ "'," + reco.getIdGasto() + "," + reco.getIdUsuario() + ",'" +
				reco.getConsumido() + "','" + reco.getEstado() +"')";
		
		reco.setIdRecordatorio(secRecordatorio);

		try {
			execute(conn, sql);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeStatement();
		}

	}
	public void updateRecordatorio(Recordatorio reco){
		Connection conn = getConnection();
		String sql = "UPDATE recordatorios set " + "nombre='" + reco.getNombre() + "', "
				+ "fecha= to_date('" + reco.getFecha() + "','dd/mm/yyyy HH24:MI:SS'), " 
				+ "mensaje= " + "'" + reco.getMensaje()  +"', "
				+ "estado= " + "'" + reco.getEstado() + "'"
				+ " WHERE idgasto=" + reco.getIdGasto();

		try {
			execute(conn, sql);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeStatement();
		}
	}

	public void deleteRecordatorio(Number idreco){
		Connection conn = getConnection();
		String sql = "DELETE recordatorios " 
				+ " WHERE idrecordatorio=" + idreco;

		try {
			execute(conn, sql);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeStatement();
		}
	}
	
	public ArrayList<Recordatorio> getRecordatorioUsuario(Number IdUsuario){
		Connection conn = getConnection();
		ArrayList<Recordatorio> recordatorios = new ArrayList();

		CallableStatement cs;

		try {
		cs = conn.prepareCall("begin ? := PCK_RECORDATORIOS.GET_RECORDATORIOS_USUARIO(?); end;");
		cs.registerOutParameter(1, OracleTypes.CURSOR);
		cs.setInt(2, (Integer) IdUsuario);
		cs.execute();
		ResultSet rs = (ResultSet) cs.getObject(1);
		if (rs != null) {
			while (rs.next()) {
				Recordatorio reco = new Recordatorio();			
				reco.setIdRecordatorio(rs.getInt("IDRECORDATORIO"));
				reco.setNombre(rs.getString("NOMBRE"));
				reco.setFecha(rs.getString("FECHA"));
				reco.setMensaje(rs.getString("MENSAJE"));
				reco.setIdGasto(rs.getInt("IDGASTO"));
				reco.setIdUsuario(rs.getInt("IDUSUARIO"));
				reco.setConsumido(rs.getString("CONSUMIDO"));
				reco.setEstado(rs.getString("ESTADO"));							
				recordatorios.add(reco);				
			}
			rs.close();
			return recordatorios;
		}
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			closeStatement();
		}
		return null;
	}
	
}
